home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / taropyon / silib / inc / simnu.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  5.9 KB  |  196 lines

  1. /*************************************************************************
  2. *    "simnu.h"
  3. *-------------------------------------------------------------------------
  4. *    Menu library
  5. *                                            Copyright (c) 1993, TaroPYON
  6. *************************************************************************/
  7.  
  8. #ifndef    _SIMNU_H
  9. #define    _SIMNU_H
  10.  
  11. #include    <setjmp.h>
  12.  
  13. #ifndef    _SIEV_H
  14. #    include    <siev.h>
  15. #endif
  16. #ifndef    _SIDLG_H
  17. #    include    <sidlg.h>
  18. #endif
  19. #ifndef    _SIFTS_H
  20. #    include    <sifts.h>
  21. #endif
  22.  
  23. /*    "mnu010.c"        ----------------------------------------------------*/
  24.  
  25. typedef struct _mnudat_t
  26. {
  27.     struct _mnudat_t    *next;
  28.  
  29.     unsigned int    att;            /* 属性                    */
  30.     unsigned int    stt;            /* ステータス            */
  31.  
  32.     int                skey;            /* ショートカットキー    */
  33.     FTSDAT_T       *fts;            /* フォント                */
  34.     char           *msg;            /* メッセージ            */
  35.     int                xsMsg, ysMsg;    /* メッセージの大きさ    */
  36.     FRAME_T            fr;                /* 表示フレーム            */
  37.  
  38.     void           *mnuChild;        /* サブメニュー用        */
  39.     void           *mnu;            /* 項目が属するメニュー    */
  40.  
  41.     int                evNo;
  42.     int              (*func)(int, struct _mnudat_t *);
  43.     void           *ptr;
  44. } MNUDAT_T;
  45.  
  46. #define    MNUDAT_ATT_OFF            (0x0001_0000)    /* 選択禁止                        */
  47. #define    MNUDAT_ATT_NORET        (0x0002_0000)    /* 実行してもメニューを抜けない    */
  48. #define    MNUDAT_ATT_DSPON        (0x0004_0000)    /* 実行中もメニューを表示        */
  49. #define    MNUDAT_ATT_CHILD        (0x1000_0000)    /* サブメニュー                    */
  50. #define    MNUDAT_ATT_CLOSECHILD    (0x2000_0000)    /* サブメニューも自動クローズ    */
  51.  
  52. typedef struct _mnu_t
  53. {
  54.     struct _mnu_t    *next, *prev;
  55.     struct _mnu_t    *mnuCrt;        /* カレントメニュー            */
  56.     struct _mnu_t    *mnuTop;        /* 接続されているメニュー    */
  57.     struct _mnu_t    *mnuLast;        /* 最後に開いてるメニュー    */
  58.  
  59.     unsigned int    att;            /* 属性                    */
  60.     unsigned int    stt;            /* ステータス            */
  61.     DLG_T           *dlg;            /* ダイアログ            */
  62.     EV_T           *ev;                /* イベント                */
  63.     jmp_buf            jmpbuf;
  64.     int              (*exitChk)(struct _mnu_t *,EVQUE_T *);
  65.                                     /* 終了チェック用関数    */
  66.     void           *exitPtr;        /* 終了イベント用ワーク    */
  67.  
  68.     char           *title;            /* タイトル                */
  69.     FTSDAT_T       *ftsTtl;            /* タイトルフォント        */
  70.  
  71.     FRAME_T            frMnu;            /* メニュー枠            */
  72.     FTSDAT_T       *ftsMnu;            /* メニュー表示フォント    */
  73.     int                selPos;            /* 選択カーソル位置        */
  74.     int                datNum;            /* データ数                */
  75.     MNUDAT_T       *datCrt;
  76.     MNUDAT_T       *datTop;
  77.     MNUDAT_T       *datLast;
  78.     EV_T           *evDat;            /* 選択用イベント        */
  79.  
  80.     FTSDAT_T       *ftsMsg;        /* メッセージ用フォント    */
  81.     COLOR_T           *colTbl;        /* カラーテーブル        */
  82. } MNU_T;
  83.  
  84. extern MNU_T   *MNU_open(void);
  85. extern int        MNU_setTitle( MNU_T *mnu, FTSDAT_T *fts, CONST char *form, ... );
  86. extern int        MNU_datAppend( MNU_T *mnu, MNUDAT_T *para, CONST char *form, ... );
  87. extern int        MNU_datAdd( MNU_T *mnu, MNUDAT_T *para, size_t sizpara, CONST char *msg );
  88. extern void        MNU_datClear( MNU_T *mnu );
  89. extern int        MNU_datChange( MNU_T *mnu, int mnuNo, UINT att, CONST char *form, ... );
  90. extern int        MNU_setSize( MNU_T *mnu, int xs, int ys );
  91. extern int        MNU_start( MNU_T *mnu );
  92. extern void        MNU_close( MNU_T *mnu );
  93.  
  94. /* メニュー設定用パラメータの設定    */
  95. #define    MNU_DATSET(_para,_att,_skey,_fts,_evNo,_func,_ptr)    \
  96. {    _para.att      = (_att);                            \
  97.     _para.skey     = (_skey);                            \
  98.     _para.fts      = (_fts);                            \
  99.     _para.mnuChild = NULL;                                \
  100.     _para.evNo     = (_evNo);                            \
  101.     _para.func     = (int (*)(int,MNUDAT_T *))(_func);    \
  102.     _para.ptr      = (_ptr);                            \
  103. }
  104.  
  105. /* 通常メニューの追加    */
  106. #define    MNU_DATAPPENT(_mnu,_att,_skey,_fts,_evNo,_func,_ptr,_msg)    \
  107. {    MNUDAT_T    _para;                                    \
  108.     MNU_DATSET(_para,_att,_skey,_fts,_evNo,_func,_ptr)    \
  109.     MNU_datAppend( (_mnu), &_para, "%s", (_msg) );        \
  110. }
  111.  
  112. /*    サブメニュー設定用パラメータの設定    */
  113. #define    MNU_MNUSET(_para,_att,_skey,_fts,_mnuChild)    \
  114. {    _para.att      = (_att)|MNUDAT_ATT_CHILD;        \
  115.     _para.skey     = (_skey);                        \
  116.     _para.fts      = (_fts);                        \
  117.     _para.mnuChild = (_mnuChild);                    \
  118. }
  119.  
  120. /* サブメニューの追加    */
  121. #define    MNU_MNUAPPENT(_mnu,_att,_skey,_fts,_mnuChild,_msg)    \
  122. {    MNUDAT_T    _para;                                        \
  123.     MNU_MNUSET(_para,_att,_skey,_fts,_mnuChild);            \
  124.     MNU_datAppend( (_mnu), &_para, "%s", (_msg) );            \
  125. }
  126.  
  127. #define    MNU_BLKAPPENT(_mnu,_att,_stt)    \
  128. {    MNUDAT_T    _para;            \
  129.     _para.att     = (_att);        \
  130.     _para.stt     = (_stt);        \
  131.     MNU_datAppend( (_mnu), &_para, NULL );    \
  132. }
  133.  
  134. /*    "mnu020.c"        ----------------------------------------------------*/
  135. /*    メニューバー                                                        */
  136. /*----------------------------------------------------------------------*/
  137.  
  138. typedef struct _mbardat_t
  139. {
  140.     struct _mbardat_t    *next;
  141.     unsigned int    att;        /* 属性            */
  142.     unsigned int    stt;        /* ステータス    */
  143.     int                xs;
  144.     FRAME_T            fr;            /* 表示位置        */
  145.     UINT            ch, ec;        /* キー            */
  146.     MNU_T           *mnu;        /* メニュー        */
  147.  
  148.     FTSDAT_T       *fts;        /* フォント        */
  149.     int                xsMsg, ysMsg;
  150.     char           *msg;        /* メッセージ    */
  151.     COLOR_T            cstr;        /* 文字色        */
  152.     COLOR_T            cbtn;        /* ボタン色        */
  153.     COLOR_T            chil, csha;    /* ハイライト,シャドー    */
  154.  
  155.     void            *mbar;
  156. } MBARDAT_T;
  157.  
  158. typedef struct
  159. {
  160.     int                x0, y0;            /* 表示開始位置    */
  161.     int                ys;                /* 縦の大きさ    */
  162.     WIN_T           *win;            /* ウィンドゥ    */
  163.     EV_T           *ev;                /* イベント        */
  164.     jmp_buf            jmpbuf;
  165.  
  166.     FTSDAT_T       *fts;            /* フォント        */
  167.     int                mbNum;            /* メニューの数    */
  168.     MBARDAT_T       *mbCrt;            /* カレント        */
  169.     MBARDAT_T       *mbTop;
  170. } MBAR_T;
  171.  
  172. #define    MBAR_ATT_DSPMARK    (0x0000_0001)    /* [▼]マークの表示    */
  173.  
  174. extern MBAR_T  *MBAR_open( WIN_T *win );
  175. extern void        MBAR_close( MBAR_T *mbar );
  176. extern int        MBAR_setDat( MBAR_T *mbar, MBARDAT_T *para, CONST char *form, ... );
  177. extern int        MBAR_evset( MBAR_T *mbar, EV_T *evBas );
  178. extern int        MBAR_dsp( MBAR_T *mbar, int x0, int y0 );
  179.  
  180. #define    MBAR_SETDAT(_mbar,_att,_ch,_ec,_mnu,_fts,_xs,_cstr,_cbtn,_chil,_csha,_msg)    \
  181. {    MBARDAT_T    _para;            \
  182.     _para.att  = (_att);        \
  183.     _para.ch   = (_ch);            \
  184.     _para.ec   = (_ec);            \
  185.     _para.mnu  = (_mnu);        \
  186.     _para.fts  = (_fts);        \
  187.     _para.xs   = (_xs);            \
  188.     _para.cstr = (_cstr);        \
  189.     _para.cbtn = (_cbtn);        \
  190.     _para.chil = (_chil);        \
  191.     _para.csha = (_csha);        \
  192.     MBAR_setDat((_mbar),&_para,"%s",(_msg));    \
  193. }
  194.  
  195. #endif
  196.